home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / CUGUK / APPLICAT / C034.ZIP / DBQCRE.C < prev    next >
Text File  |  2010-11-01  |  3KB  |  131 lines

  1. /*    SDB - relation creation routines    */
  2.  
  3. #include "bdscio.h"
  4. #include "dbqdefs.h"
  5.  
  6. struct relation *db_rcreate(rname)
  7.     char *rname;
  8. {
  9.     struct relation *rptr;
  10.  
  11.     if ((rptr = alloc(RELSIZE)) == NULL)
  12.         { RETERR(INSMEM) }
  13.  
  14.     strncpy(rptr->rl_name,rname,RNSIZE);
  15.     rptr->rl_tcnt = 0;
  16.     rptr->rl_tmax = 0;
  17.     rptr->rl_data = 512;
  18.     rptr->rl_size = 1;
  19.     rptr->rl_header.hd_attrs[0].at_name[0] = 0;
  20.  
  21.     return (rptr);
  22. }
  23.  
  24. int db_rcheader(rptr)
  25.     struct relation *rptr;
  26. {
  27.     char rname[RNSIZE+1],filename[RNSIZE+13];
  28.  
  29.     db_cvbytes(rptr->rl_tcnt,rptr->rl_header.hd_tcnt);
  30.     db_cvbytes(rptr->rl_tmax,rptr->rl_header.hd_tmax);
  31.     db_cvbytes(rptr->rl_data,rptr->rl_header.hd_data);
  32.     db_cvbytes(rptr->rl_size,rptr->rl_header.hd_size);
  33.  
  34.     strncpy(rname,rptr->rl_name,RNSIZE);
  35.     rname[RNSIZE] = 0;
  36.     sprintf(filename,"%s.dbq",rname);
  37.  
  38.     if ((ccreat(rptr->rl_fd,filename)) == -1) {
  39.         free(rptr);
  40.         RETERR(RELCRE)
  41.     }
  42.  
  43.     if (cwrite(rptr->rl_fd,&rptr->rl_header,512) != 512) {
  44.         cclose(rptr->rl_fd);
  45.         free(rptr);
  46.         RETERR(BADHDR)
  47.     }
  48.  
  49.     return (TRUE);
  50. }
  51.  
  52. int db_rctuples(rptr,tcnt)
  53.     struct relation *rptr;
  54.     unsigned tcnt;
  55. {
  56.     unsigned i;
  57.     char *tbuf;
  58.  
  59.     rptr->rl_tmax = tcnt;
  60.  
  61.     if ((tbuf = alloc(RELSIZE)) == NULL)
  62.         { RETERR(INSMEM) }
  63.  
  64.     for (i = 0; i < tcnt; i++)
  65.         if (cwrite(rptr->rl_fd,tbuf,rptr->rl_size) != rptr->rl_size) {
  66.             free(tbuf);
  67.             RETERR(INSBLK)
  68.         }
  69.     free(tbuf);
  70.  
  71.     return(TRUE);
  72. }
  73.  
  74. int db_rcdone(rptr)
  75.     struct relation *rptr;
  76. {
  77.     db_cvbytes(rptr->rl_tcnt,rptr->rl_header.hd_tcnt);
  78.     db_cvbytes(rptr->rl_tmax,rptr->rl_header.hd_tmax);
  79.  
  80. #ifdef DEBUG
  81.     printf("rcdone - %d, %d, %d\n",rptr->rl_tmax,
  82.             rptr->rl_header.hd_tmax[0],
  83.             rptr->rl_header.hd_tmax[1]);
  84. #endif
  85.     cseek(rptr->rl_fd,0,0);
  86.     if (cwrite(rptr->rl_fd,&rptr->rl_header,512) != 512) {
  87.         cclose(rptr->rl_fd);
  88.         free(rptr);
  89.         RETERR(BADHDR)
  90.     }
  91.  
  92.     cclose(rptr->rl_fd);
  93.     free(rptr);
  94.     return(TRUE);
  95. }
  96.  
  97. int db_rcattr(rptr,aname,type,size,scale)
  98.     struct relation *rptr;
  99.     char *aname;
  100.     int type,size,scale;
  101. {
  102.     int i;
  103.  
  104.     for (i = 0; i < NATTRS; i++)
  105.         if (rptr->rl_header.hd_attrs[i].at_name[0] == 0)
  106.             break;
  107.         else if (db_sncmp(aname,rptr->rl_header.hd_attrs[i].at_name,ANSIZE) == 0)
  108.             { RETERR(DUPATT) }
  109.  
  110.     if (i == NATTRS)
  111.         { RETERR(MAXATT) }
  112.  
  113.     strncpy(rptr->rl_header.hd_attrs[i].at_name,aname,ANSIZE);
  114.     rptr->rl_header.hd_attrs[i].at_type = type;
  115.     rptr->rl_header.hd_attrs[i].at_size = size;
  116.     rptr->rl_header.hd_attrs[i].at_scale = scale;
  117.  
  118.     if (++i != NATTRS)
  119.         rptr->rl_header.hd_attrs[i].at_name[0] = 0;
  120.  
  121.     rptr->rl_size += size;
  122.  
  123.     return(TRUE);
  124. }
  125.  
  126. cale;
  127.  
  128.     if (++i != NATTRS)
  129.         rptr->rl_header.hd_attrs[i].at_name[0] = 0;
  130.  
  131.     rptr-